/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __B103E03B_3164_436c_8299_4052729399AC__
#define __B103E03B_3164_436c_8299_4052729399AC__

/////////////////////////////////////////////////////////////////////////////////////////
// 

namespace xos_container
{
    class i_container;
}

namespace xos
{
    class i_xos : public xos::i_release
    {
    protected:
        virtual ~i_xos(){}

    public:
        //
        // 需要释放
        // 
        virtual i_dir_monitor * dir_monitor() = 0;
        virtual i_dynamic * dynamic() = 0;

        virtual i_thread * thread() = 0;
        virtual i_time * tm() = 0;

        virtual i_file * file() = 0;
        virtual i_dir * dir() = 0;

        virtual i_socket * socket() = 0;
        virtual i_select * select() = 0;

        virtual i_event * event() = 0;
        virtual i_lock * mutex() = 0;
        virtual i_lock * spin() = 0;

        //
        // 不用释放
        // 
        virtual i_misc * misc() = 0;
        virtual i_crt * crt() = 0;

        // 
        // get exe path
        // 
        virtual const char * exe_path() = 0;
    };

    // 
    // export function for i_xos
    // 
    typedef int ( * f_create )( xos_container::i_container * pContainer, i_xos ** ppv );
}

#endif // __B103E03B_3164_436c_8299_4052729399AC__
